/* 
 * File:   Parametros.cpp
 * Author: Arturo
 * 
 * Created on November 28, 2010, 10:52 PM
 */

#include "PLParametros.h"

PLParametros* PLParametros::instancia = NULL;

PLParametros::PLParametros() {
    // Junto todos los parametros obtenidos del servidor web en un solo string.
    string params = "";
    cin >> params;
    char* get;
    get = getenv("QUERY_STRING");
    if (params != "" && get) {
        params += "&";
    }
    if (get) {
        params += get;
    }

    // Parseo los parametros en nombre-valor.
    int inicio = 0, fin = 0;
    string nombre = "", valor = "";
    if (params.length() > 0) {
        do {
            fin = params.find('=', inicio)+1;
            nombre = params.substr(inicio, fin-inicio-1);
            inicio = fin;

            fin = params.find('&', inicio)+1;
            valor = params.substr(inicio, fin-inicio-1);
            // quitar los +
            int pos = 0;
            pos = valor.find('+', pos);
            while (pos > 0) {
                valor.replace(pos, 1, " ");
                pos = valor.find('+', pos);
            }

            inicio = fin;
            
            this->Add(new Parametro(NULL, nombre, valor));
        } while (fin != 0);
    }
}

PLParametros::~PLParametros() {
}

PLParametros &PLParametros::GetInstancia() {
    if (instancia == NULL) {
        instancia = new PLParametros();
    }

    return *instancia;
}

string PLParametros::Param(string nombre)
{
    this->Reset();

    while (this->Current) {
        if (((Parametro*)this->Current->Dato)->GetNombre() == nombre) {
            return ((Parametro*)this->Current->Dato)->GetValor();
        }

        this->Next();
    }

    this->Reset();

    return "";
}
